﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using App.Persistencia;
using App.SolInf.Modelo;
using App.SolInf.Vista.Listado;

namespace App.SolInf.Vista
{
    public partial class CrearLineaVenta : Form
    {
        private ILineaVenta _lineaVenta;

        public ILineaVenta LineaVenta
        {
            get { return _lineaVenta; }
            set
            {
                lineaPresupuestoBindingSource.DataSource = _lineaVenta = value;
                if (_lineaVenta != null)
                {
                    _lineaVenta.PropertyChanged += new PropertyChangedEventHandler(_lineaVenta_PropertyChanged);
                }
            }
        }

        void _lineaVenta_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if(e.PropertyName=="Producto")
            {
                productoBindingSource.DataSource = _lineaVenta.Producto;
            }
        }

        public CrearLineaVenta()
        {
            InitializeComponent();
            buscarProducto1.Repositorio = new Repositorio();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
            Close();
        }

        public void Alta(ILineaVenta lineaVenta)
        {
            LineaVenta = lineaVenta;
            ModuloSolInf.Instance.AbrirFormulario(this);
        }

        private void btnBuscarProducto_Click(object sender, EventArgs e)
        {
            var listadoProducto = new ListadoProducto();
            
            listadoProducto.ItemSelected += listadoProducto_ItemSelected;
            listadoProducto.BuscarElemento();
        }

        void listadoProducto_ItemSelected(object sender, Git.Vista.Widgets.ListadoBusquedaItemEventArgs e)
        {
            buscarProducto1.Producto = _lineaVenta.Producto = (Producto) e.ItemSeleccionado;
            txtCantidad.Focus();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }
        
        private bool _valida()
        {
            return Math.Abs(LineaVenta.Cantidad - 0) > Double.Epsilon && LineaVenta.Producto != null;
        }

        private void CrearLineaVenta_Load(object sender, EventArgs e)
        {
            buscarProducto1.Focus();
        }

        private void txtCantidad_KeyDown(object sender, KeyEventArgs e)
        {
            
            if (e.KeyCode == Keys.Enter && _valida())
            {
                DialogResult = DialogResult.OK;
                Close();
            }
        }

        public void AltaCompra(LineaCompra lineaCompra)
        {
            txtPrecio.ReadOnly = false;
            lblPrecio.Text = "Costo";
            Alta(lineaCompra);
        }

    }
}
